﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objetos;
using Onshi.POS.Clientes;
using Onshi.POS.Clientes.Vistas;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class ClientesBajaHabilitacion : FormularioBase, IClientesBajaHabilitacion
    {
        #region Constructores

        public ClientesBajaHabilitacion(Boolean esSeleccion)
        {
            InitializeComponent();
            btnSeleccionar.Visible = esSeleccion;
            presentador = new ClientesBajaHabilitacionPresentador(this);
        }

        #endregion

        #region Atributos

        private List<TelefonoCliente> listaTelefonos;
        private List<DomicilioCliente> listaDomicilios;
        private DetalleCliente detalle;
        private ClientesBajaHabilitacionPresentador presentador;
        private Modelo.Entidades.Cliente clienteSeleccionado;

        #endregion

        #region Propiedades

        public Int32 IdRubroClienteFiltro
        {
            get { throw new NotImplementedException(); }
        }

        public Byte IdTipoIvaFiltro
        {
            get { return (Byte)cboTipoIvaFiltro.SelectedValue; }
        }

        public Int32 IdListaPrecioVentaFiltro
        {
            get { return (Int32)ucListaPrecioVentaFiltro.cboListasPreciosVentas.SelectedValue; }
        }

        public Int32 IdVendedorFiltro
        {
            get { throw new NotImplementedException(); }
        }

        public Byte IdTipoFormaPagoFiltro
        {
            get { throw new NotImplementedException(); }
        }

        public Modelo.Entidades.Cliente ClienteSeleccionado
        {
            get { return clienteSeleccionado; }
        }

        public List<Modelo.Entidades.Cliente> Lista
        {
            set { bsClientes.DataSource = value; }
        }

        public Int32 IdCliente
        {
            get { return ((Vendedor)bsClientes.Current).Id; }
        }

        public List<TelefonoCliente> ListaTelefonos
        {
            set { listaTelefonos = value; }
        }

        public List<DomicilioCliente> ListaDomicilios
        {
            set { listaDomicilios = value; }
        }

        public DetalleCliente Detalle
        {
            set { detalle = value; }
        }

        //public Int32 IdRubroVendedorFiltro
        //{
        //    get { return (Int32)ucRubroVendedorFiltro.cboRubrosVendedores.SelectedValue; }
        //}

        //public Byte IdTipoComosionVendedorFiltro
        //{
        //    get { return (Byte)cboTipoComisionVendedorFiltro.SelectedValue; }
        //}

        public String CodigoFiltro
        {
            get { return txtCodigoFiltro.Text; }
        }

        public String NombreFiltro
        {
            get { return txtNombreFiltro.Text; }
        }

        public String CuitFiltro
        {
            get { return mskCuitFiltro.Text; }
        }

        public Decimal DescuentoRecargoDesdeFiltro
        {
            get { return ucDescuentoRecargoFiltro.Desde; }
        }

        public Decimal DescuentoRecargoHastaFiltro
        {
            get { return ucDescuentoRecargoFiltro.Hasta; }
        }

        public Decimal LimiteDeudaDesdeFiltro
        {
            get { return ucLimiteDeudaFiltro.Desde; }
        }

        public Decimal LimiteDeudaHastaFiltro
        {
            get { return ucLimiteDeudaFiltro.Hasta; }
        }

        public EnumEstadoCheck EstaEliminadoFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkEstaEliminadoFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneDomiciliosFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneDomiciliosFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneTelefonosFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneTelefonosFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneObservacionFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneObservacionFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneImagenFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneImagenFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneInternetFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneInternetFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        #endregion

        #region Metodos

        private void LimpiarCamposFiltro()
        {
            //txtNombreFiltro.Text = String.Empty;
            //txtCodigoFiltro.Text = String.Empty;
            //ucRubroVendedorFiltro.cboRubrosVendedores.SelectedValue = (Int32)EnumRubroVendedor.TODOS;
            //mskCuitFiltro.Text = String.Empty;
            //cboTipoComisionVendedorFiltro.SelectedValue = (Byte)EnumTipoComisionVendedor.TODOS;
            //ucDescuentoRecargoFiltro.Limpiar();
            //ucLimiteDeudaFiltro.Limpiar();
            //chkEstaEliminadoFiltro.CheckState = CheckState.Indeterminate;
            //chkTieneDomiciliosFiltro.CheckState = CheckState.Indeterminate;
            //chkTieneTelefonosFiltro.CheckState = CheckState.Indeterminate;
            //chkTieneObservacionFiltro.CheckState = CheckState.Indeterminate;
            //chkTieneImagenFiltro.CheckState = CheckState.Indeterminate;
            //chkTieneInternetFiltro.CheckState = CheckState.Indeterminate;
        }

        #endregion

        #region Eventos

        private void ClientesBajaHabilitacion_Load(Object sender, EventArgs e)
        {
            try
            {
                ucRubrosClientesFiltro.ActualizarListado();
                ucListaPrecioVentaFiltro.ActualizarListado();
                cboTipoIvaFiltro.ActualizarListado();
                cboTipoFormaPagoFiltro.ActualizarListado();
                presentador.Inicializar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnNuevo_Click(Object sender, EventArgs e)
        {
            try
            {
                var clientesAltaModificacion = new ClientesAltaModificacion();
                clientesAltaModificacion.MinimizeBox = false;
                clientesAltaModificacion.MaximizeBox = false;
                if (clientesAltaModificacion.ShowDialog() == DialogResult.OK)
                {
                    presentador.Nuevo();
                    ucUltimaActualizacion.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnModificar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsClientes.Current != null)
                {
                    var vendedoresAltaModificacion = new VendedoresAltaModificacion(((Vendedor)bsClientes.Current).Id);
                    vendedoresAltaModificacion.MinimizeBox = false;
                    vendedoresAltaModificacion.MaximizeBox = false;
                    if (vendedoresAltaModificacion.ShowDialog() == DialogResult.OK)
                    {
                        presentador.Modificar();
                        ucUltimaActualizacion.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsClientes.Current != null)
                {
                    if (((Modelo.Entidades.Cliente)bsClientes.Current).Id != (Int32)EnumCliente.CLIENTE_DEL_MOSTRADOR)
                    {
                        if (MessageBox.Show("¿Esta seguro que desea eliminar el cliente seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            presentador.Eliminar();
                            ucUltimaActualizacion.Actualizar();
                        }
                    }
                    else
                        MessageBox.Show("Este cliente no se puede eliminar", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnHabilitar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsClientes.Current != null)
                {
                    if (((Modelo.Entidades.Cliente)bsClientes.Current).Id != (Int32)EnumCliente.CLIENTE_DEL_MOSTRADOR)
                    {
                        if (MessageBox.Show("¿Esta seguro que desea habilitar el cliente seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            presentador.Habilitar();
                            ucUltimaActualizacion.Actualizar();
                        }
                    }
                    else
                        MessageBox.Show("Este cliente no se puede habilitar", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnLimpiar_Click(Object sender, EventArgs e)
        {
            LimpiarCamposFiltro();
        }

        private void btnVerDomicilios_Click(Object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                var cliente = ((Modelo.Entidades.Cliente)bsClientes.Current);
                if (cliente.TieneDomicilios == true)
                {
                    var domiciliosVer = new DomiciliosVer(EnumTipoEntidad.CLIENTE, cliente.Id);
                    domiciliosVer.MinimizeBox = false;
                    domiciliosVer.MaximizeBox = false;
                    domiciliosVer.ShowDialog();
                }
            }
        }

        private void btnVerTelefonos_Click(Object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                var cliente = ((Modelo.Entidades.Cliente)bsClientes.Current);
                if (cliente.TieneTelefonos == true)
                {
                    var telefonosVer = new TelefonosVer(EnumTipoEntidad.CLIENTE, cliente.Id);
                    telefonosVer.MinimizeBox = false;
                    telefonosVer.MaximizeBox = false;
                    telefonosVer.ShowDialog();
                }
            }
        }

        private void btnVerObservacion_Click(Object sender, EventArgs e)
        {
            //if (bsClientes.Current != null)
            //{
            //    var vendedor = ((Vendedor)bsClientes.Current);
            //    if (vendedor.TieneObservacion == true)
            //    {
            //        presentador.VerObservacion();
            //        var observacionVer = new ObservacionVer(EnumTipoEntidad.VENDEDOR, vendedor.Nombre, detalle.Observacion);
            //        observacionVer.ShowDialog();
            //    }
            //}
        }

        private void btnVerImagen_Click(Object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                var vendedor = ((Vendedor)bsClientes.Current);
                if (vendedor.TieneImagen == true)
                {
                    var imagenVer = new ImagenVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    imagenVer.MaximizeBox = false;
                    imagenVer.MinimizeBox = false;
                    imagenVer.ShowDialog();
                }
            }
        }

        private void btnVerInternet_Click(Object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                var vendedor = ((Vendedor)bsClientes.Current);
                if (vendedor.TieneInternet == true)
                {
                    var internetVer = new InternetVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    internetVer.MinimizeBox = false;
                    internetVer.MaximizeBox = false;
                    internetVer.ShowDialog();
                }
            }

        }

        private void btnImprimir_Click(Object sender, EventArgs e)
        {

        }

        private void btnSeleccionar_Click(Object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                clienteSeleccionado = (Modelo.Entidades.Cliente)bsClientes.Current;
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
                MessageBox.Show("No hay ningun cliente seleccionado", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnActualizar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Actualizar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void grdClientes_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (grdClientes.Columns[e.ColumnIndex].Name == colInternet.Name)
            {
                if (((Modelo.Entidades.Cliente)bsClientes.List[e.RowIndex]).TieneInternet == true)
                    e.Value = Properties.Resources.computer;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colObservacion.Name)
            {
                if (((Modelo.Entidades.Cliente)bsClientes.List[e.RowIndex]).TieneObservacion == true)
                    e.Value = Properties.Resources.page_copy;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colImagen.Name)
            {
                if (((Modelo.Entidades.Cliente)bsClientes.List[e.RowIndex]).TieneImagen == true)
                    e.Value = Properties.Resources.picture;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colTelefonos.Name)
            {
                if (((Modelo.Entidades.Cliente)bsClientes.List[e.RowIndex]).TieneTelefonos == true)
                    e.Value = Properties.Resources.telephone;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colDomicilios.Name)
            {
                if (((Modelo.Entidades.Cliente)bsClientes.List[e.RowIndex]).TieneDomicilios == true)
                    e.Value = Properties.Resources.building;
            }
        }

        private void grdClientes_CellContentClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (grdClientes.Columns[e.ColumnIndex].Name == colInternet.Name)
                {
                    var vendedor = ((Vendedor)bsClientes.List[e.RowIndex]);
                    var internetVer = new InternetVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    internetVer.MinimizeBox = false;
                    internetVer.MaximizeBox = false;
                    internetVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colObservacion.Name)
                {
                    var vendedor = ((Vendedor)bsClientes.List[e.RowIndex]);
                    //presentador.VerObservacion();
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.VENDEDOR, vendedor.Nombre, detalle.Observacion);
                    observacionVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colImagen.Name)
                {
                    var vendedor = ((Vendedor)bsClientes.List[e.RowIndex]);
                    var imagenVer = new ImagenVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    imagenVer.MinimizeBox = false;
                    imagenVer.MaximizeBox = false;
                    imagenVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colTelefonos.Name)
                {
                    var vendedor = ((Vendedor)bsClientes.List[e.RowIndex]);
                    var telefonosVer = new TelefonosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    telefonosVer.MinimizeBox = false;
                    telefonosVer.MaximizeBox = false;
                    telefonosVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colDomicilios.Name)
                {
                    var vendedor = ((Vendedor)bsClientes.List[e.RowIndex]);
                    var domiciliosVer = new DomiciliosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    domiciliosVer.MinimizeBox = false;
                    domiciliosVer.MaximizeBox = false;
                    domiciliosVer.ShowDialog();
                }
            }
        }

        #region Filtro

        private void txtCodigoFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void txtNombreFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void mskCuitFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucRubroVendedorFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cboTipoComisionVendedorFiltro_SelectedIndexChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucComisionFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucComisionMaximaFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkEstaEliminadoFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneDomiciliosFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneTelefonosFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneObservacionFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneImagenFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneInternetFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #endregion

      
    }
}